package org.example;

import java.util.HashMap;
//给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组，并返回该子数组的长度。
//示例 1：
//输入：nums = [0,1]
//输出：2
//说明：[0, 1] 是具有相同数量 0 和 1 的最长连续子数组。
//示例 2：
//输入：nums = [0,1,0]
//输出：2
//说明：[0, 1] (或 [1, 0]) 是具有相同数量 0 和 1 的最长连续子数组。
//示例 3：
//输入：nums = [0,1,1,1,1,1,0,0,0]
//输出：6
//解释：[1,1,1,0,0,0] 是具有相同数量 0 和 1 的最长连续子数组。
public class findMaxLength {
    public int findMaxLength(int[] nums) {
        HashMap<Integer,Integer> hash=new HashMap<>();
        //默认0前面有前缀和为0的，因为要返回下标所以是-1
        hash.put(0,-1);
        int sum=0,ret=0;
        //访问下标
        for(int i=0;i<nums.length;i++){
            sum+=(nums[i]==0? -1:1);//计算当前位置的前缀和
            if(hash.containsKey(sum)) ret=Math.max(ret,i-hash.get(sum));
            else  hash.put(sum,i);
        }
        return ret;
    }
}
